\subsubsection{Analyse de RNALfold}
~\\

J'ai dû dans un premier installer sur mon poste de travail et comprendre ce que fait l'outil de prédiction de structure secondaire, entre autres me familiariser avec le format d'entrée et de sortie du programme.

Il attend un format fasta à analyser, qui est un fichier texte où est stockée la structure primaire de la séquence à analyser avec optionnellement en entête un commentaire, généralement l'identifiant de la séquence précédé du caractère ">", par exemple:
\\
\\
\begin{figure}[h]
$\mathit{>ath-MIR5657}$\\
$\mathit{CCAAAUACGAGUCGAACUCUUGUCCUGAAGUGUAGAGGCCUAAACC}$\\
$\mathit{AGUACACAACCAACUGGACAAGGUUAGAUUUGGUGGAAA}$
\caption{\label{entree} Entrée RNALfold}
\end{figure}
~\\

En sortie, nous avons donc l'ensemble des structures secondaires calculées. Le format de sortie suit une grammaire $G = (V_t,V_n,P,S)$ bien précise:
\\
Avec:\\
$V_t = \{CHEVRON,POINT,PO,PF,DECIMAL,ENTIER,ID,SEQUENCE_PRIMAIRE\}$\\
$V_n = \{resultat,debut,sequences,fin,une\_sequence,structure,energie,\\\ \ \ \ \ \ position\_debut,points,
meilleure_energie\}$\\
$S = resultat$\\
et $P:$
\begin{verbatim}
              resultat          := debut sequences fin
              debut             := VIDE | CHEVRON ID
              sequences         := une_sequence | une_sequence sequences | VIDE
              une_sequence      := structure energie position_debut
              structure         := points PO structure PF points | points
              points            := POINT | POINT points | VIDE
              energie           := DECIMAL
              position_debut    := entier
              fin               := meilleure_energie SEQUENCE_PRIMAIRE
              meilleure_energie := PO DECIMAL PF
\end{verbatim}


Avec le vocabulaire:
\begin{verbatim}
CHEVRON = '>'
POINT = '.'
PO = '('
PF = ')'
ENTIER = [1-9][0-9]*
DECIMALE = ENTIER POINT [0-9]*
ID = ([a-z]|[A-Z]|[0-9])*
SEQUENCE_PRIMAIRE = (A | C | G | U )+
\end{verbatim}
~\\

J'ai donc traduis la grammaire ci-dessus, en langage C, pour pouvoir parser les sorties de RNALfold. Pour cela je lis le fichier résultant de RNALfold caractère par caractère et selon les différents états dans lesquels on se trouve, j'effectue des traitements pour sauvegarder l'ensemble des données lues, en particulier la structure secondaire que j'enregistre sous forme de tableau à deux dimensions. 
Ainsi pour une ligne de prédiction sous cette forme:


\begin{center}
. ( ) ( . . ) ( ) \ \ \ (-98.2)\ \ 7
\end{center}
~\\

La donnée correspondante est: 
\\
\\
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.7]{../imports/resultat.png}
\caption{\label{resultat} Structure de données stockant la liste des appariements formant une structure secondaire}
\end{center}
\end{figure}
\\

\begin{center}
\begin{tabular}{|l|c|c|c|}
\end{tabular}
\end{center}


Pour tester le bon fonctionnement du parsing, j'ai affiché sur la sortie standard le même format que la sortie de RNALfold à partir des données sauvegardées et regardé la différence grâce à la commande diff\footnote{commande unix qui compare les fichiers ligne par ligne}. J'ai également affiché le tableau des appariements en comparant manuellement avec des exemples simples. 

En même temps, j'ai créé un dossier qui a accueilli un ensemble de tests positifs et négatifs que j'ai ajouté au fur et à mesure de l'avancement du projet. Ainsi, à chaque modification de code, ces tests devront restés positifs et négatifs. Un script est prévu pour lancer automatiquement ces tests. 
